home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / lineed.zip / XMTASK2.C < prev   
C/C++ Source or Header  |  1992-04-05  |  2KB  |  133 lines

  1. /**********************************************************/
  2. /* Try to find out if we're running under a multitasker   */
  3. /**********************************************************/
  4.  
  5. #ifdef __TURBOC__
  6.   #define _fastcall pascal
  7. #endif
  8.  
  9. #include "lineed.h"
  10. #include "timers.h"
  11.  
  12. static union REGS rg;
  13.  
  14. static int pascal is_dv (void);
  15. static int pascal is_ddos (void);
  16. static int pascal is_mos (void);
  17. static int pascal is_tv (void);
  18. static int pascal is_os2 (void);
  19.  
  20. extern void    pascal pause_dv (void);
  21. extern void    pascal pause_ddos (void);
  22. extern void    pascal pause_tv (void);
  23. extern void    pascal pause_mos (void);
  24. extern void    pascal pause_os2 (void);
  25. extern void    pascal pause_dos (void);
  26.  
  27. void pascal (*pause_mtask)(void) = pause_dos;
  28.  
  29.  
  30. void pascal 
  31. set_mtask (void)
  32. {
  33.  
  34.   if (is_dv ()) {
  35.     pause_mtask = pause_dv;
  36.   }
  37.   else if (is_ddos ()) {
  38.     pause_mtask = pause_ddos;
  39.   }
  40.   else if (is_mos ()) {
  41.     pause_mtask = pause_mos;
  42.   }
  43.   else if (is_tv ()) {
  44.     pause_mtask = pause_tv;
  45.   }
  46.   else if (is_os2 ()) {
  47.     pause_mtask = pause_os2;
  48.   }
  49. }
  50.  
  51.  
  52. static int pascal 
  53. is_dv (void)
  54. {
  55.  
  56.   rg.x.cx = 0x4445;
  57.   rg.x.dx = 0x5351;
  58.   rg.x.ax = 0x2b01;
  59.   int86 (0x21, &rg, &rg);
  60.   return rg.h.al != 0xff;
  61.  
  62. /*
  63.   rg.h.al = 2;
  64.   int86(0x21,&rg,&rg);
  65.   if(rg.h.al != 0xff) {
  66.     dvshadow = rg.x.dx;
  67.     maxy = rg.h.bh;
  68.     maxx = rg.h.bl;
  69.   }
  70. */
  71.  
  72. }
  73.  
  74.  
  75. static int pascal 
  76. is_ddos (void)
  77. {
  78.  
  79.   rg.h.ah = 0xe4;
  80.   int86 (0x21, &rg, &rg);
  81.   if (rg.h.al == 1 || rg.h.al == 2)
  82.     return 1;
  83.   return 0;
  84. }
  85.  
  86.  
  87. static int pascal 
  88. is_mos (void)
  89. {
  90.  
  91.   int             temp;
  92.  
  93.   rg.h.ah = 0x30;
  94.   int86 (0x21, &rg, &rg);
  95.   temp = rg.x.ax;
  96.   rg.x.ax = 0x3000;
  97.   rg.x.bx = 0x3000;
  98.   rg.x.cx = 0x3000;
  99.   rg.x.dx = 0x3000;
  100.   int86 (0x21, &rg, &rg);
  101.   if (rg.x.ax == temp)
  102.     return temp;
  103.   return 0;
  104. }
  105.  
  106.  
  107. static int pascal 
  108. is_tv (void)
  109. {
  110.  
  111.   rg.x.ax = 0x1022;
  112.   rg.x.bx = 0;
  113.   int86 (0x15, &rg, &rg);
  114.   if (!rg.x.bx)
  115.     return 0;
  116.   return rg.x.bx;
  117. }
  118.  
  119.  
  120. static int pascal 
  121. is_os2 (void)
  122. {
  123.  
  124.   struct SREGS sg;
  125.  
  126.   rg.x.ax = 0x352f;
  127.   int86x(0x21,&rg,&rg,&sg);
  128.   if(!(rg.x.bx | sg.es)) return 0;
  129.   rg.x.ax = 0x1600;
  130.   int86 (0x2f, &rg, &rg);
  131.   return (rg.h.al == 0);
  132. }
  133.